package models

import (
	"github.com/astaxie/beego/orm"
	_ "github.com/go-sql-driver/mysql"
	"time"
)

type User struct {
	//当 Field 类型为 int, int32, int64, uint, uint32, uint64 时,且模型定义里没有主键，该Field 将被视为自增健.
	Id   int    `json:"id"`
	Name string `orm:"size(25)" json:"name"`
	//go-sql-driver默认时间为UTC时间，因此在驱动注册连接数据库时需指定时区
	//auto_now 每次调用都更新时间，auto_now_add 仅在第一次创建
	//type(datetime) 对应数据库datetime类型时间，type(time)对应数据库date类型时间
	Time time.Time `orm:"auto_now;type(datetime)" json:"time"`
	Age  int       `json:"age" orm:"default(0)"`
	//设置唯一 `orm:"unique"`
	//设置浮点数精度orm `orm:"digits(12);decimals(4)"`  总共12位，四位是小数位
	//允许为空 `orm:"null"`
	//orm:"on_delete"
	//Profile *Profile `json:"profile" orm:"reverse(one)"`
	Profile *Profile `json:"profile" orm:"rel(one)"`
	City    []*City  `json:"city" orm:"rel(m2m)" `
	Phone   []*Phone `json:"phone" orm:"reverse(many)" orm:"null"`
}

type Profile struct {
	Id    int    `json:"id"`
	Email string `json:"email"`
	//User *User `json:"user" orm:"rel(one)"`
}

type City struct {
	Id   int     `json:"id"`
	Name string  `json:"city" orm:"size(25)"`
	User []*User `json:"user" orm:"reverse(many)"`
}

type Phone struct {
	Id     int    `json:"id"`
	Number string `json:"number" orm:"size(11) "`
	User   *User  `json:"user" orm:"rel(fk)"`
}

func init() {
	//orm.RegisterDataBase(别名(默认), 数据库驱动, 连接的数据库，最大空闲连接数int，最大连接数int)
	orm.RegisterDataBase("default", "mysql", "root:mysql@tcp(127.0.0.1:3306)/gotest?charset=utf8&loc=Asia%2FShanghai")
	//也可单独设置最大连接数和最大空闲数
	//orm.SetMaxIdleConns("default", 30)
	//orm.SetMaxOpenConns("default", 30)

	//注册表
	orm.RegisterModel(new(User), new(Profile), new(City), new(Phone))
	//也可以使用前缀，如下注册完表名为 beego_user
	//orm.RegisterModelWithPrefix("beego_", new(User))

	//创建表
	//orm.RunSyncdb("default", 当表结构变化时是否强制更新表, 是否终端显示创建表的sql语句)
	orm.RunSyncdb("default", false, true)
}
